class HttpRequestManager extends BaseClass{
	public constructor() {
		super();
	}
	/**
	 * 请求服务器数据
	 * @param url 服务器连接地址
	 * @param data 传输数据
	 * @param callback 回调函数
	 * @param method 请求类型 默认为egret.HttpMethod.GET，可选值为 egret.HttpMethod.GET || egret.HttpMethod.POST
	 * @param needLogin 是否需要登录后再请求
	 */
	public request(url:string,data:any,callback?:Function,method:string=egret.HttpMethod.POST,needLogin:boolean = true){
		// 为了满足可以写全url和只写部分url，如果url不是以http或https开头的，则默认添加一个公共的请求地址前缀
		if(url && url.toUpperCase().indexOf("HTTP") != 0){
			url=GameConfig.requestUrl+url;
		}
		// 使用保存在内存中的值或保存在localStorage里的值
		let cookieKey = GameConfig.gameName+GameConstants.saveHeaderCookieKey;
		let head=GameConfig.requestHead || Utils.getItemFromStorage(cookieKey);
		// 如果需要登录而还没有登录过的cookie，则延迟1秒后再重新请求
		if(needLogin && !head){
			// 延迟1秒后再请求
			egret.setTimeout(function(){
				App.HttpRequestManager.request(url,data,callback,method,needLogin);
			},this,1000);
		}else{
			platform.request(url,data,function(res){
				// 对于提示登录状态已失效,code==1000的接口，重新登录后
				if(res.statusCode == 200 && res.data.code == 1000){
					// 清除登录标志
					GameConfig.requestHead = null;
					egret.localStorage.removeItem(cookieKey);
					// 重新登录
					App.login(function(res2){
						// 登录成功后再重新请求之前的接口
						App.HttpRequestManager.request(url,data,callback,method,needLogin);
					});
					// 重新登录
				}else{
					if(callback){
						callback(res);
					}
				}
			},method,{"Cookie":head,innerv:GameConfig.version});
		}
		
	}
}